﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using rent_car.Manejadores;

namespace rent_car.Gui
{
    public partial class FormNuevoUsuario : Form
    {
        private Manejador manejadorUsuarios;
        private ValidadorDeFormularios validador;

        public FormNuevoUsuario()
        {
            inicializar();           
        }

        public FormNuevoUsuario(usuario usuario)
        {
            inicializar();
            usuarioModificado = usuario;
            cargarCampos();

        }

        private void inicializar()
        {
            InitializeComponent();
            manejadorUsuarios = ManejadorDeUsuarios.GetInstancia();
            validador = new ValidadorDeFormularios();
        }

        private void cargarCampos()
        {
            txtNombre.Text = usuarioModificado.persona.nombre;
            txtApellido.Text = usuarioModificado.persona.apellido;
            txtTelefono.Text = usuarioModificado.persona.telefono;
            txtCelular.Text = usuarioModificado.persona.celular;
            txtUsuario.Text = usuarioModificado.usuario1;
            txtClave.Text = usuarioModificado.clave;
            txtConfirmar.Text = usuarioModificado.clave;
        }

        private void BtbBusqueda_Click(object sender, EventArgs e)
        {
            
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            if (validarCampos() && claveValida())
            {
                if (usuarioModificado == null)
                {
                    agregarUsuario();
                    txtNombre.Focus();
                    MessageBox.Show(null, "Usuario agregado con éxito", "Información", MessageBoxButtons.OK);
                }
                else
                {
                    modificarUsuario();
                    txtNombre.Focus();
                    manejadorUsuarios.modificar(usuarioModificado);
                    MessageBox.Show(null, "Usuario modificado con éxito", "Información", MessageBoxButtons.OK);
                }
            }
        }

        private void agregarUsuario()
        {
            persona personaUsuario = new persona()
            {
                nombre = txtNombre.Text,
                apellido = txtApellido.Text,
                telefono = txtTelefono.Text,
                celular = txtCelular.Text
            };

            usuario usuario = new usuario()
            {
                persona = personaUsuario,
                usuario1 = txtUsuario.Text,
                clave = txtClave.Text,
                activo = true
            };
            manejadorUsuarios.agregar(usuario);
            limpiarCampos();
        }

        private void modificarUsuario()
        {
           usuarioModificado.persona.nombre = txtNombre.Text;
           usuarioModificado.persona.apellido = txtApellido.Text;
           usuarioModificado.persona.telefono = txtTelefono.Text;
           usuarioModificado.persona.celular = txtCelular.Text;
           usuarioModificado.usuario1 = txtUsuario.Text;
           usuarioModificado.clave = txtClave.Text;
           usuarioModificado.activo = true;
        }   
  
        private bool claveValida()
        {
            bool valido = true;
            if(txtClave.Text !=txtConfirmar.Text){
                lblIncorrecto.Visible = true;
                valido = false;            
            } 
            return valido;
        }
        
        private bool validarCampos()
        {
            return validador.validarCamposEspecificos(txtNombre, txtApellido, txtClave, txtUsuario);
        }

#region limpiar errorprovider
        private void txtNombre_LostFocus(object sender , EventArgs e)
        {
            validador.limpiarErrores(txtNombre);
        }

        private void txtApellido_LostFocus(object sender, EventArgs e)
        {
            validador.limpiarErrores(txtApellido);
        }
        private void txtUsuario_LostFocus(object sender, EventArgs e)
        {
            validador.limpiarErrores(txtUsuario);
        }
        private void txtClave_LostFocus(object sender, EventArgs e)
        {
            validador.limpiarErrores(txtClave);
        }
#endregion

        private void limpiarCampos()
        {
            validador.LimpiarCampos(gbUsuario);
            lblIncorrecto.Visible = false;
        }

        private usuario usuarioModificado = null;
    }  
}
